package com.piece.core.mongo.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import java.io.Serializable;
import java.util.Date;

/**
 * 系统登陆记录 sys_login_log
 */
@Data
@NoArgsConstructor
@Document(collection = "sys_login_log")
@CompoundIndexes({
        @CompoundIndex(name = "index_sys_login_log", def = "{'application_name':1,'user_name':1,'opera_time':1}")
})
public class MongoLoginLog implements Serializable {

    /**
     * 记录主键
     */
    @Id
    private String logId;

    /**
     * 应用名
     */
    @Field("application_name")
    private String applicationName;

    /**
     * 登录状态 0登入 1登出 2强退
     * ${@link com.piece.core.log.enums.LoginLogType}
     */
    @Field("type")
    private String type;

    /**
     * 登录账号ID
     */
    @Field("user_id")
    @Indexed(expireAfterSeconds = 60 * 60 * 24 * 180) // 半年后过期
    private String userId;

    /**
     * 登录账号名
     */
    @Field("user_name")
    private String userName;

    /**
     * 登录IP
     */
    @Field("ip")
    private String ip;

    /**
     * 登录城市
     */
    @Field("city")
    private String city;

    /**
     * 登录地点
     */
    @Field("area")
    private String area;

    /**
     * 浏览器
     */
    @Field("browser")
    private String browser;

    /**
     * 操作系统
     */
    @Field("os")
    private String os;

    /**
     * 操作状态（0正常 1异常）
     */
    @Field("status")
    private String status;

    /**
     * 提示消息
     */
    @Field("desc")
    private String desc;

    /**
     * 租户id
     */
    @Field("client_id")
    private String clientId;

    /**
     * 操作用户id
     */
    @Field("opera_id")
    private String operaId;

    /**
     * 操作用户名
     */
    @Field("opera_name")
    private String operaName;

    /**
     * 访问时间
     */
    @Field("opera_time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date operaTime;
}